package com.pe.pgn.clubpgn.dao.impl;


import java.util.Calendar;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

import com.pe.pgn.clubpgn.common.CLPConstantes;
import com.pe.pgn.clubpgn.dao.TipoTarjetaPersonaDao;
import com.pe.pgn.clubpgn.dao.hibernate.GenericDaoHibernate;
import com.pe.pgn.clubpgn.domain.ClpdTipoTarjetaPersona;

@Repository
public class TipoTarjetaPersonaDaoImpl extends GenericDaoHibernate<ClpdTipoTarjetaPersona, Long>
		implements TipoTarjetaPersonaDao {

	public TipoTarjetaPersonaDaoImpl() {
		super(ClpdTipoTarjetaPersona.class);
	}

	@SuppressWarnings({ "unchecked"})
	public List<ClpdTipoTarjetaPersona> obtenerTiposTarjetasPersonas(){
		
		Criteria criteria = DetachedCriteria.forClass(ClpdTipoTarjetaPersona.class)
			.getExecutableCriteria(getSessionFactory().getCurrentSession());

		criteria.setMaxResults(CLPConstantes.MAXIMO_RESULTADO_INICIAL);
		criteria.add(Restrictions.eq("stTipoTarjetaPersona", Boolean.TRUE));
		criteria.addOrder(Order.desc("id"));
		
		List<ClpdTipoTarjetaPersona> lista = criteria.list(); 
		return lista;
	}
	
	public void guardarTipoTarjetaPersona(ClpdTipoTarjetaPersona tipoTarjetaPersona){
		
		if(tipoTarjetaPersona.getId() == null){
			tipoTarjetaPersona.setCoUsuarioCreador(getUsuarioLogueado().getUsername());
			tipoTarjetaPersona.setDaFechaCreacion(Calendar.getInstance());
		}
		else{
			tipoTarjetaPersona.setCoUsuarioModificador(getUsuarioLogueado().getUsername());
			tipoTarjetaPersona.setDaFechaModificacion(Calendar.getInstance());
		}	
		
		save(tipoTarjetaPersona);
		getHibernateTemplate().flush();
	}
	
	public ClpdTipoTarjetaPersona obtenerTipoTarjetaPersona(Long id){
		
		ClpdTipoTarjetaPersona tipoTarjetaPersona = get(id);
		return tipoTarjetaPersona;
	}
	
	public void eliminarTipoTarjetaPersona(Long id){
		
		remove(id);
		getHibernateTemplate().flush();
	}
	

}
